package one.beex.robot.symbol;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

import java.math.BigDecimal;
import java.util.Date;

public class SymbolInfo {
    public enum Status {
        TRADING,
        HALT
    }


    private String symbol;
    private Status status;
    private Status nextStatus;
    private Date nextStatusAt;

    private String baseAsset;
    private Integer baseAssetPrecision;
    private String quoteAsset;
    private Integer quotePrecision;
    private BigDecimal minPrice;
    private BigDecimal maxPrice;
    private BigDecimal priceTickSize;
    private BigDecimal minQuantity;
    private BigDecimal maxQuantity;
    private BigDecimal quantityStepSize;
//    private BigDecimal minNotional;
    private BigDecimal commissionRate;


    public String getSymbol() {
        return symbol;
    }

    public SymbolInfo setSymbol(String symbol) {
        this.symbol = symbol;
        return this;
    }

    public SymbolInfo setCommissionRate(BigDecimal commissionRate) {
        this.commissionRate = commissionRate;
        return this;
    }

    public BigDecimal getCommissionRate() {
        return commissionRate;
    }

    public Status getStatus() {
        return status;
    }

    public SymbolInfo setStatus(Status status) {
        this.status = status;
        return this;
    }

    public Status getNextStatus() {
        return nextStatus;
    }

    public SymbolInfo setNextStatus(Status nextStatus) {
        this.nextStatus = nextStatus;
        return this;
    }

    public Date getNextStatusAt() {
        return nextStatusAt;
    }

    public SymbolInfo setNextStatusAt(Date nextStatusAt) {
        this.nextStatusAt = nextStatusAt;
        return this;
    }

    public String getBaseAsset() {
        return baseAsset;
    }

    public SymbolInfo setBaseAsset(String baseAsset) {
        this.baseAsset = baseAsset;
        return this;
    }

    public Integer getBaseAssetPrecision() {
        return baseAssetPrecision;
    }

    public SymbolInfo setBaseAssetPrecision(Integer baseAssetPrecision) {
        this.baseAssetPrecision = baseAssetPrecision;
        return this;
    }

    public String getQuoteAsset() {
        return quoteAsset;
    }

    public SymbolInfo setQuoteAsset(String quoteAsset) {
        this.quoteAsset = quoteAsset;
        return this;
    }

    public Integer getQuotePrecision() {
        return quotePrecision;
    }

    public SymbolInfo setQuotePrecision(Integer quotePrecision) {
        this.quotePrecision = quotePrecision;
        return this;
    }

    public BigDecimal getMinPrice() {
        return minPrice;
    }

    public SymbolInfo setMinPrice(BigDecimal minPrice) {
        this.minPrice = minPrice;
        return this;
    }

    public BigDecimal getMaxPrice() {
        return maxPrice;
    }

    public SymbolInfo setMaxPrice(BigDecimal maxPrice) {
        this.maxPrice = maxPrice;
        return this;
    }

    public BigDecimal getPriceTickSize() {
        return priceTickSize;
    }

    public SymbolInfo setPriceTickSize(BigDecimal priceTickSize) {
        this.priceTickSize = priceTickSize;
        return this;
    }

    public BigDecimal getMinQuantity() {
        return minQuantity;
    }

    public SymbolInfo setMinQuantity(BigDecimal minQuantity) {
        this.minQuantity = minQuantity;
        return this;
    }

    public BigDecimal getMaxQuantity() {
        return maxQuantity;
    }

    public SymbolInfo setMaxQuantity(BigDecimal maxQuantity) {
        this.maxQuantity = maxQuantity;
        return this;
    }

    public BigDecimal getQuantityStepSize() {
        return quantityStepSize;
    }

    public SymbolInfo setQuantityStepSize(BigDecimal quantityStepSize) {
        this.quantityStepSize = quantityStepSize;
        return this;
    }

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
}
